package exception;

/**
 * java异常处理机制中的try-catch
 * 语法:
 * try{
 *     A计划(程序正常逻辑代码)
 * }catch(XXXXException){
 *     针对A计划中出现的XXXXException后的补救措施(B计划)
 * }
 *
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");

        try {
            //String line = null;
            String line = "a";
            //当JVM执行程序出现某个异常时就会实例化对应的异常实例并将其抛出
            //如果这句报错的代码没有异常处理机制，则该异常会被抛出到当前方法之外(这里相当于是main方法之外)
            //如果有异常处理机制，则会跳到对应的catch块处理该异常
            System.out.println(line.length());
            System.out.println(line.charAt(1));
            System.out.println("!!!!!!!!!!!!!");
        }
//        catch (NullPointerException e){
//            System.out.println("出现空指针, 并解决了");
//        }catch (StringIndexOutOfBoundsException e){
//            System.out.println("出现下标越界, 并解决了");
//        }
        //当多个异常有相同的解决办法时，可以合并到一个catch中处理
        catch (NullPointerException|StringIndexOutOfBoundsException e){
            System.out.println("出现空指针或下标越界, 并解决了");
        }
        //可以捕获某个超类异常，那么凡是try中出现了该异常的子类型异常时都可以被其捕获
        catch (Exception e){
            System.out.println("就是出了个错");
        }

        System.out.println("程序结束了");
    }
}
